#include "players_graph.h"

players_graph::players_graph(QWidget *parent):
        QWidget(parent),
        pixmap(NULL),
        templ(NULL),
        legend(NULL),
        max_graczy(0),
        przedzial(-1),
        last(-1),
        timer(new QTimer),
        file_dialog(new QFileDialog())
{

    //templ=NULL;
    //*graczy=0;
    //max_graczy=NULL;
    setFixedSize(600,400);
    srand(time(NULL));
    //przedzial=NULL;
    //last=NULL;
    //legend=NULL;
    //save_file=new QFileDialog();
    //timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(add_to_paint()));
    connect(file_dialog,SIGNAL(fileSelected(QString)),this,SLOT(save_file(QString)));
    timer->start(3000);
}


//majac wszytskie potrzebne dane inicjalizujemy zmienne oraz pixmapy
void players_graph::init_Pixmap()
{

    pixmap = new QPixmap(this->size());
    pixmap->fill("white");
    przedzial=this->height()/(*max_graczy);
    templ=new QPixmap(this->size());
    templ->fill("white");
    legend=new QPixmap(30,this->width());
    legend->fill(QColor(245,243,244));
    QPainter r(legend);
    QPainter h(templ);
    h.setPen(QColor(100,20,200));
    for(int i=0;i<=(*max_graczy);i++)
    {
        h.setPen(QColor(80,80,80));
        int a=i* przedzial;
        h.drawLine(0,a,600,a);
        r.drawLine(0,a,30,a);

        h.setPen(QColor(0,0,0));
        QFont font("Courier", 5, QFont::Normal);
        r.setFont(font);
        r.drawText(3,a+(przedzial*4/5),QString::number((*max_graczy)-i));

    }


    QPainter w(pixmap);
    w.drawPixmap(0,0, *templ);

}


//kopiuje wykres i legende na widget
void players_graph::paintEvent(QPaintEvent *)
{
    if(legend!=NULL)
    {
        QPainter p(this);
        p.drawPixmap(0, 0, *pixmap);
        p.drawPixmap(this->width()-20,0, *legend);
    }
}


//uaktualnianie wykresu graczy
void players_graph::add_to_paint()
{
    //jesli serwer nie dodal pocztkowych wartosci lub wartosci sa nieprawidlowe nie wykonujemy funkcjii
    if(*max_graczy!=0)
    {
        if(przedzial==-1) init_Pixmap();
        QPainter g(templ);
        g.drawPixmap(-20,0,*pixmap);
        QPainter p(pixmap);
        p.drawPixmap(0,0,*templ);
        if(last==-1)
        {
            p.setPen(QPen(QColor(160,10,30), 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
            
            int y2=przedzial*(*graczy)-przedzial/2;
            p.drawPoint(560,this->height()-y2);
            last=y2;
        }
        else
        {
            p.setPen(QPen(QColor(160,10,30), 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
            int y2=przedzial*(*graczy)-przedzial/2;
            p.drawLine(540,this->height()-last,560,this->height()-y2);
            last=y2;
        }
        this->update();
    }
}


//inicjacja wskaznikow do [ilosci graczy] i [maskymalej ilsoci graczy]
//wartosci wskazuja na zera w wypadku bledow w poalczeniu itp.
void players_graph::set_players(int &graczy, int &max_graczy)
{
    this->graczy=&graczy;
    this->max_graczy=&max_graczy;

}


//slot wybieraniu nazwy pliku do zapisania wykresu
void players_graph::choose_file()
{
    file_dialog->show();
}

//zapisanie wykreu do danego pliku, nazwe otzymujemy przez sygnal emitowany z obiektu save_file
void players_graph::save_file(QString nazwa)
{
    if(pixmap!=NULL) pixmap->save(nazwa,"PNG");
}
